//
// Created by Jisam on 2024/6/20.
//
#include <bits/stdc++.h>

using namespace std;

using i64 = long long;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, l, h;
    cin >> n >> l >> h;
    // 初始化用于存储x和y坐标的集合
    set<int> cx{0}, cy{0};
    // 初始化物体的宽度、高度和其可能的坐标
    vector<int> a(n), b(n), x(n, -1), y(n, -1);
    // 遍历每个物体
    for (int i = 0; i < n; i++) {
        cin >> a[i] >> b[i];
        // 尝试每个可能的x和y坐标
        for (auto vx: cx) {
            for (auto vy: cy) {
                // 检查是否超出墙的界限
                if (vx + a[i] > l || vy + b[i] > h) {
                    continue;
                }
                int ok = 1;
                // 检查是否与之前的物体相交
                for (int j = 0; j < i; j++) {
                    if (!(x[j] == -1
                          || vx >= x[j] + a[j]
                          || vx + a[i] <= x[j]
                          || vy >= y[j] + b[j]
                          || vy + b[i] <= y[j])) {
                        ok = 0;
                    }
                }
                // 如果没有与之前的物体相交，记录当前坐标并更新集合
                if (ok) {
                    x[i] = vx;
                    y[i] = vy;
                    cx.insert(vx + a[i]);
                    cy.insert(vy + b[i]);
                    break;
                }
            }
            // 如果找到了合适的坐标，结束当前物体的坐标搜索
            if (x[i] != -1) {
                break;
            }
        }
        // 输出物体的坐标，如果无法放置，则输出-1
        if (x[i] == -1) {
            cout << -1 << "\n";
        } else {
            cout << x[i] << " " << y[i] << "\n";
        }
    }
    return 0;
}
